iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
Software Development

做一支專屬自己學校的課程評價 LINE Bot 吧!系列 第 8

[Day 08] 遷移與利用 admin.py 顯示後台課程評價資料表

  • 分享至 

  • xImage
  •  

利用 Django ORM 進行資料庫操作

其實昨天看似建好 models.py 就完成了,但其實我們只是對 Python 檔案做了編輯,並沒有動到資料庫。

仔細看在 hulolo 資料夾中偷偷出現了 db.sqlite3,這就是資料庫的檔案,傳統上建立資料表、刪除、更新等等,都必須透過結構式查詢語言 (SQL) 進行操作。

但為了避免新手又溺死了,也能因應不同資料庫系統的變換,昨天我們透過 Django 檔案操作資料庫的方式稱為 ORM (Object Relational Mapping),講人話就是我們可以用 Python 操作資料庫,為了要使其與資料庫同步,還需要進行「遷移 (migration)」!

此外,傳統上資料庫的檢視也需要資料庫專門套件,而 Django 提供後台包含會員系統資料庫管理網頁介面,方便開發者進行簡易的資料處理,而 /admin 則是進入後台的網址入口~

第一次的初始化

原生會員系統的遷移

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

會發現每次啟動網站都會出現這些文字,這是代表一開始就內建了會員系統相關的資料表,所以可以先執行一次遷移:

python manage.py migrate

會出現很多很多的 ok,代表遷移完成:

Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK

建立超級使用者

既然都有會員系統了,總有人要先管理這一切,想當然而就是自己了

python manage.py createsuperuser

接下來就會問一下基本問題:

Username (leave blank to use 'OOOO'): 帳號
Email address: 可以直接按 Enter
Password: 密碼
Password (again): 喵
Superuser created successfully.

接著就可以進入 http://127.0.0.1:8000/admin,輸入帳密進入後台~

變動 models.py 後需要執行遷移

每一次的 models.py 改動,若要讓資料庫的資料表也有所變化,都需要進行遷移 (migration) 這個動作:

  • 將 APP 加入 settings.py 參數:
    這一步只有在新創了 APP 的時候需要做一次,目的是讓 Django 登記你新增了一個新 APP,方法是在 settings.py 中的 INSTALLED_APPS 加上 APP 的名稱,Django 就能追蹤你對 APP 做了哪些變動 (包含models.py 的改變):
    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'import_export', #這是之前 Day03 所安裝的套件,可以幫助做資料輸入輸出   
    'chatbot' #這裡放新增的 APP 名稱
    ]
    
  1. 產生遷移文件

    python manage.py makemigrations
    

    仔細看 migrations 資料夾中的 py 檔案,會發現資料變化的紀錄,此步驟是產生要操作資料庫內容,如果偵測到變化,就會顯示以下內容:

    Migrations for 'chatbot':
    chatbot\migrations\0001_initial.py
    + Create model Course
    
  2. 進行遷移

    python manage.py migrate
    

    此步驟執行後就會讓資料庫的結構與 Django 同步。

同樣回到 http://127.0.0.1:8000/admin,就會發現怎麼沒有 QQ
先去喝杯咖啡壓壓驚。

透過 admin.py 在後台顯示資料表

儘管資料庫同步了,但想讓 Django 原生後台顯示該資料表還需要在 admin.py 櫃台登記,在 hulolo > chatbot > admin.py 加上:

from django.contrib import admin
from .models import Course
from import_export.admin import ImportExportModelAdmin

@admin.register(Course)
class CourseAdmin(ImportExportModelAdmin):
    list_display = ('teacher_name','course_name')

這裡有個語法糖果 aka 裝飾器 admin.register 是向後台註冊了此資料表;類別 CourseAdmin 則是處理資料表的呈現;list_display 則是決定要在後台顯示哪些欄位,這邊先顯示了兩個~

同樣回到 http://127.0.0.1:8000/admin,就會看到多出了 Course 玩意兒,如果點著點著看到了這畫面,就代表你功成名就了~試試看新增一筆課程評價吧!
https://ithelp.ithome.com.tw/upload/images/20240922/201515104V1dSPSMsC.png

再往前一點點

  • ORM 的形式除了便於透過各類語言操作外,也可以幫助紀錄資料表的變動過程,具有版本控制的功能
  • sqlite 是一種輕量級的資料庫,特色是只有一個檔案,方便備份與搬遷
  • 大型資料庫操作仍多半會以 SQL 為主,其效率較佳,因此有資料庫工程師這個酷酷的職位

覆盤

在這篇文章中,我們學會了:

  • 遷移的概念
  • 第一次的初始化,擁有超級使用者權限,可以管理後台與查看資料庫狀態
  • 進行遷移讓資料庫與 Django 同步
  • 同步後能夠在後台顯示資料表,進行編輯
  • Day 08 原始碼

上一篇
[Day 07] 變數命名: 利用 models.py 建立課程評價資料表
下一篇
[Day 09] 在 views.py 接收使用者訊息、篩選資料表及回覆 TextSendMessage 訊息-陽春麵版
系列文
做一支專屬自己學校的課程評價 LINE Bot 吧!20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言